package com.gome.gop.mybatis;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.context.annotation.Import;
import org.springframework.core.annotation.AliasFor;

import com.gome.gop.mybatis.rw.datasource.DynamicDataSourceRegistar;

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(DynamicDataSourceRegistar.class)
public @interface DynamicDataSources {
    @AliasFor("basePackages")
    String[] value() default {};
    
    /**
     * Base packages to scan for annotated components.
     * <p>
     * {@link #value} is an alias for (and mutually exclusive with) this
     * attribute.
     * <p>
     * Use {@link #basePackageClasses} for a type-safe alternative to
     * String-based package names.
     */
    @AliasFor("value")
    String[] basePackages() default {};
    
    /**
     * Type-safe alternative to {@link #basePackages} for specifying the
     * packages to scan for annotated components. The package of each class
     * specified will be scanned.
     * <p>
     * Consider creating a special no-op marker class or interface in each
     * package that serves no purpose other than being referenced by this
     * attribute.
     */
    Class<?>[] basePackageClasses() default {};
}
